+Thu Dec 18 19:13:12 2003 Kristian Rietveld <kris@gtk.org>
+
+ Fixes #110249, reworked patch from Joshua N Pritikin.
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_type),
+ (gtk_tree_model_sort_tree_drag_source_init),
+ (gtk_tree_model_sort_row_draggable),
+ (gtk_tree_model_sort_drag_data_get),
+ (gtk_tree_model_sort_drag_data_delete): implement GtkTreeDragSource.
+
+ * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_type),
+ (gtk_tree_model_filter_tree_drag_source_init),
+ (gtk_tree_model_filter_row_draggable),
+ (gtk_tree_model_filter_drag_data_get),
+ (gtk_tree_model_filter_drag_data_delete): ditto.
+
Thu Dec 18 18:01:01 2003 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_class_init): add key bindings
+Thu Dec 18 19:13:12 2003 Kristian Rietveld <kris@gtk.org>
+
+ Fixes #110249, reworked patch from Joshua N Pritikin.
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_type),
+ (gtk_tree_model_sort_tree_drag_source_init),
+ (gtk_tree_model_sort_row_draggable),
+ (gtk_tree_model_sort_drag_data_get),
+ (gtk_tree_model_sort_drag_data_delete): implement GtkTreeDragSource.
+
+ * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_type),
+ (gtk_tree_model_filter_tree_drag_source_init),
+ (gtk_tree_model_filter_row_draggable),
+ (gtk_tree_model_filter_drag_data_get),
+ (gtk_tree_model_filter_drag_data_delete): ditto.
+
Thu Dec 18 18:01:01 2003 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_class_init): add key bindings
+Thu Dec 18 19:13:12 2003 Kristian Rietveld <kris@gtk.org>
+
+ Fixes #110249, reworked patch from Joshua N Pritikin.
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_type),
+ (gtk_tree_model_sort_tree_drag_source_init),
+ (gtk_tree_model_sort_row_draggable),
+ (gtk_tree_model_sort_drag_data_get),
+ (gtk_tree_model_sort_drag_data_delete): implement GtkTreeDragSource.
+
+ * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_type),
+ (gtk_tree_model_filter_tree_drag_source_init),
+ (gtk_tree_model_filter_row_draggable),
+ (gtk_tree_model_filter_drag_data_get),
+ (gtk_tree_model_filter_drag_data_delete): ditto.
+
Thu Dec 18 18:01:01 2003 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_class_init): add key bindings
+Thu Dec 18 19:13:12 2003 Kristian Rietveld <kris@gtk.org>
+
+ Fixes #110249, reworked patch from Joshua N Pritikin.
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_type),
+ (gtk_tree_model_sort_tree_drag_source_init),
+ (gtk_tree_model_sort_row_draggable),
+ (gtk_tree_model_sort_drag_data_get),
+ (gtk_tree_model_sort_drag_data_delete): implement GtkTreeDragSource.
+
+ * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_type),
+ (gtk_tree_model_filter_tree_drag_source_init),
+ (gtk_tree_model_filter_row_draggable),
+ (gtk_tree_model_filter_drag_data_get),
+ (gtk_tree_model_filter_drag_data_delete): ditto.
+
Thu Dec 18 18:01:01 2003 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_class_init): add key bindings
+Thu Dec 18 19:13:12 2003 Kristian Rietveld <kris@gtk.org>
+
+ Fixes #110249, reworked patch from Joshua N Pritikin.
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_type),
+ (gtk_tree_model_sort_tree_drag_source_init),
+ (gtk_tree_model_sort_row_draggable),
+ (gtk_tree_model_sort_drag_data_get),
+ (gtk_tree_model_sort_drag_data_delete): implement GtkTreeDragSource.
+
+ * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_type),
+ (gtk_tree_model_filter_tree_drag_source_init),
+ (gtk_tree_model_filter_row_draggable),
+ (gtk_tree_model_filter_drag_data_get),
+ (gtk_tree_model_filter_drag_data_delete): ditto.
+
Thu Dec 18 18:01:01 2003 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_class_init): add key bindings
#include "gtktreemodelfilter.h"
#include "gtkintl.h"
+#include "gtktreednd.h"
#include <string.h>
/* ITER FORMAT:
static void gtk_tree_model_filter_init (GtkTreeModelFilter *filter);
static void gtk_tree_model_filter_class_init (GtkTreeModelFilterClass *filter_class);
static void gtk_tree_model_filter_tree_model_init (GtkTreeModelIface *iface);
+static void gtk_tree_model_filter_drag_source_init (GtkTreeDragSourceIface *iface);
static void gtk_tree_model_filter_finalize (GObject *object);
static void gtk_tree_model_filter_set_property (GObject *object,
guint prop_id,
static void gtk_tree_model_filter_unref_node (GtkTreeModel *model,
GtkTreeIter *iter);
+/* TreeDragSource interface */
+static gboolean gtk_tree_model_filter_row_draggable (GtkTreeDragSource *drag_source,
+ GtkTreePath *path);
+static gboolean gtk_tree_model_filter_drag_data_get (GtkTreeDragSource *drag_source,
+ GtkTreePath *path,
+ GtkSelectionData *selection_data);
+static gboolean gtk_tree_model_filter_drag_data_delete (GtkTreeDragSource *drag_source,
+ GtkTreePath *path);
/* private functions */
static void gtk_tree_model_filter_build_level (GtkTreeModelFilter *filter,
NULL
};
+ static const GInterfaceInfo drag_source_info =
+ {
+ (GInterfaceInitFunc) gtk_tree_model_filter_drag_source_init,
+ NULL,
+ NULL
+ };
+
tree_model_filter_type = g_type_register_static (G_TYPE_OBJECT,
"GtkTreeModelFilter",
&tree_model_filter_info, 0);
g_type_add_interface_static (tree_model_filter_type,
GTK_TYPE_TREE_MODEL,
&tree_model_info);
+
+ g_type_add_interface_static (tree_model_filter_type,
+ GTK_TYPE_TREE_DRAG_SOURCE,
+ &drag_source_info);
}
return tree_model_filter_type;
iface->unref_node = gtk_tree_model_filter_unref_node;
}
+static void
+gtk_tree_model_filter_drag_source_init (GtkTreeDragSourceIface *iface)
+{
+ iface->row_draggable = gtk_tree_model_filter_row_draggable;
+ iface->drag_data_delete = gtk_tree_model_filter_drag_data_delete;
+ iface->drag_data_get = gtk_tree_model_filter_drag_data_get;
+}
+
static void
gtk_tree_model_filter_finalize (GObject *object)
}
}
+/* TreeDragSource interface implementation */
+static gboolean
+gtk_tree_model_filter_row_draggable (GtkTreeDragSource *drag_source,
+ GtkTreePath *path)
+{
+ GtkTreeModelFilter *tree_model_filter = (GtkTreeModelFilter *)drag_source;
+ GtkTreePath *child_path;
+ gboolean draggable;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL_FILTER (drag_source), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (tree_model_filter, path);
+ draggable = gtk_tree_drag_source_row_draggable (GTK_TREE_DRAG_SOURCE (tree_model_filter->priv->child_model), child_path);
+ gtk_tree_path_free (child_path);
+
+ return draggable;
+}
+
+static gboolean
+gtk_tree_model_filter_drag_data_get (GtkTreeDragSource *drag_source,
+ GtkTreePath *path,
+ GtkSelectionData *selection_data)
+{
+ GtkTreeModelFilter *tree_model_filter = (GtkTreeModelFilter *)drag_source;
+ GtkTreePath *child_path;
+ gboolean gotten;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL_FILTER (drag_source), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (tree_model_filter, path);
+ gotten = gtk_tree_drag_source_drag_data_get (GTK_TREE_DRAG_SOURCE (tree_model_filter->priv->child_model), child_path, selection_data);
+ gtk_tree_path_free (child_path);
+
+ return gotten;
+}
+
+static gboolean
+gtk_tree_model_filter_drag_data_delete (GtkTreeDragSource *drag_source,
+ GtkTreePath *path)
+{
+ GtkTreeModelFilter *tree_model_filter = (GtkTreeModelFilter *)drag_source;
+ GtkTreePath *child_path;
+ gboolean deleted;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL_FILTER (drag_source), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (tree_model_filter, path);
+ deleted = gtk_tree_drag_source_drag_data_delete (GTK_TREE_DRAG_SOURCE (tree_model_filter->priv->child_model), child_path);
+ gtk_tree_path_free (child_path);
+
+ return deleted;
+}
+
/* bits and pieces */
static void
gtk_tree_model_filter_set_model (GtkTreeModelFilter *filter,
#include "gtktreestore.h"
#include "gtktreedatalist.h"
#include "gtkintl.h"
+#include "gtktreednd.h"
typedef struct _SortElt SortElt;
typedef struct _SortLevel SortLevel;
static void gtk_tree_model_sort_class_init (GtkTreeModelSortClass *tree_model_sort_class);
static void gtk_tree_model_sort_tree_model_init (GtkTreeModelIface *iface);
static void gtk_tree_model_sort_tree_sortable_init (GtkTreeSortableIface *iface);
+static void gtk_tree_model_sort_drag_source_init (GtkTreeDragSourceIface*iface);
static void gtk_tree_model_sort_finalize (GObject *object);
static void gtk_tree_model_sort_set_property (GObject *object,
guint prop_id,
static void gtk_tree_model_sort_unref_node (GtkTreeModel *tree_model,
GtkTreeIter *iter);
+/* TreeDragSource interface */
+static gboolean gtk_tree_model_sort_row_draggable (GtkTreeDragSource *drag_source,
+ GtkTreePath *path);
+static gboolean gtk_tree_model_sort_drag_data_get (GtkTreeDragSource *drag_source,
+ GtkTreePath *path,
+ GtkSelectionData *selection_data);
+static gboolean gtk_tree_model_sort_drag_data_delete (GtkTreeDragSource *drag_source,
+ GtkTreePath *path);
+
/* TreeSortable interface */
static gboolean gtk_tree_model_sort_get_sort_column_id (GtkTreeSortable *sortable,
gint *sort_column_id,
NULL
};
+ static const GInterfaceInfo drag_source_info =
+ {
+ (GInterfaceInitFunc) gtk_tree_model_sort_drag_source_init,
+ NULL,
+ NULL
+ };
+
tree_model_sort_type =
g_type_register_static (G_TYPE_OBJECT, "GtkTreeModelSort",
&tree_model_sort_info, 0);
g_type_add_interface_static (tree_model_sort_type,
GTK_TYPE_TREE_SORTABLE,
&sortable_info);
+
+ g_type_add_interface_static (tree_model_sort_type,
+ GTK_TYPE_TREE_DRAG_SOURCE,
+ &drag_source_info);
}
return tree_model_sort_type;
iface->has_default_sort_func = gtk_tree_model_sort_has_default_sort_func;
}
+static void
+gtk_tree_model_sort_drag_source_init (GtkTreeDragSourceIface *iface)
+{
+ iface->row_draggable = gtk_tree_model_sort_row_draggable;
+ iface->drag_data_delete = gtk_tree_model_sort_drag_data_delete;
+ iface->drag_data_get = gtk_tree_model_sort_drag_data_get;
+}
+
/**
* gtk_tree_model_sort_new_with_model:
* @child_model: A #GtkTreeModel
return (tree_model_sort->default_sort_func != NULL);
}
+/* DragSource interface */
+static gboolean
+gtk_tree_model_sort_row_draggable (GtkTreeDragSource *drag_source,
+ GtkTreePath *path)
+{
+ GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)drag_source;
+ GtkTreePath *child_path;
+ gboolean draggable;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL_SORT (drag_source), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ child_path = gtk_tree_model_sort_convert_path_to_child_path (tree_model_sort,
+ path);
+ draggable = gtk_tree_drag_source_row_draggable (GTK_TREE_DRAG_SOURCE (tree_model_sort->child_model), child_path);
+ gtk_tree_path_free (child_path);
+
+ return draggable;
+}
+
+static gboolean
+gtk_tree_model_sort_drag_data_get (GtkTreeDragSource *drag_source,
+ GtkTreePath *path,
+ GtkSelectionData *selection_data)
+{
+ GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)drag_source;
+ GtkTreePath *child_path;
+ gboolean gotten;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL_SORT (drag_source), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ child_path = gtk_tree_model_sort_convert_path_to_child_path (tree_model_sort,
+ path);
+ gotten = gtk_tree_drag_source_drag_data_get (GTK_TREE_DRAG_SOURCE (tree_model_sort->child_model), child_path, selection_data);
+ gtk_tree_path_free (child_path);
+
+ return gotten;
+}
+
+static gboolean
+gtk_tree_model_sort_drag_data_delete (GtkTreeDragSource *drag_source,
+ GtkTreePath *path)
+{
+ GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)drag_source;
+ GtkTreePath *child_path;
+ gboolean deleted;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL_SORT (drag_source), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ child_path = gtk_tree_model_sort_convert_path_to_child_path (tree_model_sort,
+ path);
+ deleted = gtk_tree_drag_source_drag_data_delete (GTK_TREE_DRAG_SOURCE (tree_model_sort->child_model), child_path);
+ gtk_tree_path_free (child_path);
+
+ return deleted;
+}
+
/* sorting code - private */
static gint
gtk_tree_model_sort_compare_func (gconstpointer a,